package com.hjy.scheduled.config.redis;

import java.util.List;

public interface CacheClient {
    /**
     *
     * 设置对象
     */
    public <T> boolean set(String prefix,String key, T t);

    /**
     *
     * 【设置小键的值】
     *
     */
    public <T> boolean hashSet(String realKey,String hashKey, T t);

    /**
     *
     * 【得到最外层的大键的值】
     *
     */
    public <T> T hashGet(String realKey);

    /**
     *
     * 【根据大键和小键，得到小键的值】
     *
     */
    public <T> T hashGet(String realKey,String hashKey);

    /**
     *
     * 【根据最外层大键删除所有的值】
     *
     */
    public <T> boolean hashDelete(String realKey);

    /**
     *
     * @Title: hashDelete
     * @Description: 【根据最外层大键和小键删除所有的值】
     */
    public <T> boolean hashDelete(String realKey,String hashKey);

    /**
     *
     * 设置对象
     *
     */
    public <T> boolean set(String prefix,String key, T t, Long timeout);

    /**
     *
     * 设置列表缓存
     */
    public <T> boolean setList(String prefix, String key, List<T> t);

    /**
     *
     * 获取对象
     *
     */
    public <T> T get(String prefix,String key);

    /**
     * 设置对象
     */
    public <T> boolean setBound(String prefix,String key, T t);

    /**
     *
     * 获取列表缓存
     *
     */
    public <T> List<T> getList(String prefix,String key);

    /**
     *
     * 删除缓存
     *
     */
    public void delete(String prefix,String key);


    /******************************************/
    /**
     * 压栈
     *
     */
    public Long push(String key, String value);

    /**
     * 出栈
     *
     * @param key
     * @return
     */
    public String pop(String key);

    /**
     * 入队
     *
     * @param key
     * @param value
     * @return
     */
    public Long in(String key, String value);

    /**
     * 出队
     *
     * @param key
     * @return
     */
    public String out(String key);

    /**
     * 栈/队列长
     *
     * @param key
     * @return
     */
    public Long length(String key);

    /**
     * 范围检索
     *
     * @param key
     * @param start
     * @param end
     * @return
     */
    public List<String> range(String key, int start, int end);

    /**
     * 移除
     *
     * @param key
     * @param i
     * @param value
     */
    public void remove(String key, long i, String value);

    /**
     * 检索
     *
     * @param key
     * @param index
     * @return
     */
    public String index(String key, long index);

    /**
     * 置值
     *
     * @param key
     * @param index
     * @param value
     */
    public void set(String key, long index, String value);

    /**
     * 裁剪
     *
     * @param key
     * @param start
     * @param end
     */
    public void trim(String key, long start, int end);
}
